package cn.pupil.springframework.beans.factory.support;

import cn.pupil.springframework.beans.BeansException;
import cn.pupil.springframework.beans.factory.config.BeanDefinition;

import java.lang.reflect.Constructor;

/**
 * @Description: Bean实例化策略接口
 * @Author: pupil
 * @Date: 2024/10/28 下午 5:07
 */
public interface InstantiationStrategy {
    /**
     * 实例化 Bean 对象
     *
     * @param beanDefinition bean定义
     * @param beanName bean名
     * @param ctor java.lang.reflect 包下的 Constructor(构造器) 类，里面包含了一些必要的类信息，有这个参数的目的就是为了拿到符合入参信息相对应的构造函数。
     * @param args 具体的入参信息
     * @return
     * @throws BeansException
     */
    Object instantiate(BeanDefinition beanDefinition, String beanName, Constructor ctor, Object[] args) throws BeansException;
}
